# coding=utf-8
# 公用的自定义工具类
from flask import session, current_app, g

from info.models import User

import functools


def do_index_class(index):
    # 返回指定缩影对应的类名  自定义的过滤器
    if index == 0:
        return 'first'
    elif index == 1:
        return 'second'
    elif index == 2:
        return 'third'
    return ''


# 会出现循环导入的问题
# 查看登录状态的装饰器
def query_login_data(f):
    # functools.wraps(f)的作用:如果不使用，那么被装饰器装饰的函数的名字就会变为 装饰器内部的函数名字
    # 使用这个装饰器之后，可以让原来函数的名字不变
    # 使用functools.wraps去装饰内层函数,可以保持当前装饰器去修饰的函数的__name__的值不变
    #  使用了functools.wraps(f)装饰了 函数之后，可以保证，被装饰的函数的__name__属性不变  如果不添加那么 所有被装饰函数的名字都是wrapper
    @functools.wraps(f)
    def wrapper(*args, **kwargs):
        # 查询用户登录信息
        user_id = session.get('user_id', None)
        # 设置user为None 以防再数据库中没有查询出来，下次使用得时候出错
        user = None
        if user_id:
            # 尝试查询用户的模型
            try:
                user = User.query.get(user_id)
            except Exception as e:
                current_app.logger.error(e)

        g.user = user
        return f(*args, **kwargs)

    return wrapper
